// 定义一个类型 Size，用于表示宽度和高度
type Size = {
    width: number,
    height: number,
    [key: string]: any,
}

/**
 * 函数 winResize，计算适应屏幕的宽高
 * @param wRange
 * @param hRange
 * @param oRatio
 */
export default function winResize(
    wRange: number[] = [16, 2500],  // 可选参数，宽度范围，默认值为 [16, 2500]
    hRange: number[] = [1080, 9],   // 可选参数，高度范围，默认值为 [1080, 9]
    oRatio: number[] = [16, 9],     // 可选参数，原始比例，默认值为 [16, 9]
): Size {
    // 获取当前浏览器窗口的宽度和高度
    const screenWidth = window.innerWidth
    const screenHeight = window.innerHeight

    // 计算宽高比例的最小值和最大值
    const minRatio = wRange[0] / hRange[1] // 最小宽高比
    const maxRatio = wRange[1] / hRange[0] // 最大宽高比
    const oriRatio = oRatio[0] / oRatio[1] // 原始宽高比
    const winRatio = screenWidth / screenHeight // 当前窗口的宽高比

    // 声明新宽度和新高度的变量
    let newWidth, newHeight

    // 根据当前窗口的宽高比和预设的比例范围来计算新的宽高
    if (winRatio <= minRatio) {
        // 如果当前窗口的宽高比小于等于最小宽高比
        newWidth = screenWidth // 宽度设为屏幕宽度
        newHeight = screenWidth / oriRatio // 高度根据原始比例计算
    } else if (winRatio <= oriRatio) {
        // 如果当前窗口的宽高比小于等于原始宽高比
        newHeight = screenHeight // 高度设为屏幕高度
        newWidth = newHeight * oriRatio // 宽度根据原始比例计算
    } else if (winRatio < maxRatio) {
        // 如果当前窗口的宽高比在原始宽高比和最大宽高比之间
        newWidth = screenWidth // 宽度设为屏幕宽度
        newHeight = screenHeight // 高度设为屏幕高度
    } else {
        // 如果当前窗口的宽高比大于等于最大宽高比
        newHeight = screenHeight // 高度设为屏幕高度
        newWidth = newHeight * maxRatio // 宽度根据最大比例计算
    }

    // 确保计算出的宽高不超出屏幕边界
    newWidth = Math.min(newWidth, screenWidth) // 确保新宽度不超过屏幕宽度
    newHeight = Math.min(newHeight, screenHeight) // 确保新高度不超过屏幕高度

    // 返回计算得到的宽高
    return {
        width: newWidth,
        height: newHeight,
        oriRatioWidth: '',
    }
}

/**
 * 保持高度占满，宽度拉伸
 * @param wRange
 * @param hRange
 * @param oRatio
 */
export function winResizeY(
    wRange: number[] = [16, 2500],  // 可选参数，宽度范围，默认值为 [16, 2500]
    hRange: number[] = [1080, 9],   // 可选参数，高度范围，默认值为 [1080, 9]
    oRatio: number[] = [16, 9],     // 可选参数，原始比例，默认值为 [16, 9]
) {
    // 获取当前浏览器窗口的宽度和高度
    const screenWidth = window.innerWidth
    const screenHeight = window.innerHeight

    // 计算宽高比例的最小值和最大值
    const minRatio = wRange[0] / hRange[1] // 最小宽高比
    const maxRatio = wRange[1] / hRange[0] // 最大宽高比
    const oriRatio = oRatio[0] / oRatio[1] // 原始宽高比
    const winRatio = screenWidth / screenHeight // 当前窗口的宽高比

    // 声明新宽度和新高度的变量
    let newWidth, newHeight

    if (winRatio < maxRatio) {
        newHeight = screenHeight // 高度设为屏幕高度
        newWidth = newHeight * oriRatio // 宽度根据原始比例计算
    } else {
        newWidth = screenWidth // 宽度设为屏幕宽度
        newHeight = screenWidth / oriRatio // 高度根据原始比例计算
    }

    // 返回计算得到的宽高
    return {
        width: newWidth,
        height: newHeight,
        oriRatioWidth: '',
    }
}